package test.demo;
/**
 * <p>开闭原则示例一(优化前)</p>
 * */
public class Ocp {
    public static void main(String[] args) {
        GraphicEditor graphicEditor = new GraphicEditor();
        graphicEditor.drawShape(new Rectangle());
        graphicEditor.drawShape(new Circle());
        /**
         * (1) 优点是比较好理解，简单易操作。
         * (2) 缺点是违反了设计模式的 ocp 原则，即对扩展开放(提供方)，对修改关闭(使用方)。即当我们给类增加新功能的时候，尽量不修改代码，或者尽可能少修改代码.
         * 3) 比如：我们这时要新增加一个图形种类三角形 TODO
         * */
    }
}
//这是一个用于绘图的类 [使用方]
class GraphicEditor {
    //接收Shape对象，然后根据type，来绘制不同的图形
    public void drawShape(ShapeBase s) {
        if (s.m_type == 1) { drawRectangle(s); }
        else if (s.m_type == 2){ drawCircle(s); }
    }
    public void drawRectangle(ShapeBase r) {
        System.out.println(" 绘制矩形 ");
    }
    public void drawCircle(ShapeBase r) {
        System.out.println(" 绘制圆形 ");
    }
}
/**
 * <p>Shape基类</p>
 * */
class ShapeBase {
    int m_type;
}
/**
 * <p>矩形</p>
 */
class Rectangle extends ShapeBase {
    Rectangle() { super.m_type = 1; }
}
/**
 *<p>圆</p>
 * **/
class Circle extends ShapeBase {
    Circle() { super.m_type = 2; }
}

